package com.itheima.health.job;

import com.itheima.health.common.RedisConstant;
import com.itheima.health.service.SetMealService;
import com.itheima.health.util.QiniuUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;

import java.util.Set;

/**
 * 垃圾图片定时清理
 *
 * @author likeWen
 * @since 2022/11/24 17:49
 */
@Slf4j
@Component
public class ClearImgJob {
    @Autowired
    private JedisPool jedisPool;
    @Autowired
    private QiniuUtils qiniuUtils;
    @Autowired
    private SetMealService setMealService;
    /**
     * 清理垃圾图片的执行方法
     */
    public void clearImg(){
        // 获取 redis的连接
        Jedis jedis = jedisPool.getResource();
        // 计算2个set集合的差集 所有七牛图片-保存到数据库
        // 需要删除的图片
        Set<String> needDelete = jedis.sdiff(RedisConstant.SETMEAL_PIC_RESOURCES, RedisConstant.SETMEAL_PIC_DB_RESOURCES);
        for (String img : needDelete) {
            //获取图片上传是的初始时间，图片id由System.currentTimeMillis()+_+UUID生成
            //由_分割后去索引0的位置就是图片上传是的初始时间
            Long createTime = Long.valueOf(img.split("_",2)[0]);
            //要判断，用户上传照片后等待时间时候大于清理最小等待时间；防止用户表单未提交，图片就被删除了
            if (System.currentTimeMillis()-createTime<RedisConstant.MIN_DELETE_WAIT_TIME){
                log.info("[清理垃圾图片]等待时间小于清理前的最小等待时间，暂不清除:{}",img);
                continue;
            }
            //判断数据库是否存在数据，而redis数据未删除
            Boolean count = setMealService.getByImg(img);
            if (count){
                //数据库中不存在，执行删除
                qiniuUtils.deleteFileFromQiniu(img);
            }
            // 删除redis上的图片, 两边的图片已经同步了
            jedis.del(RedisConstant.SETMEAL_PIC_RESOURCES, RedisConstant.SETMEAL_PIC_DB_RESOURCES);
        }
   }
}

